package main

import (
	"fmt"
	"math/rand"
	"time"
)

//使用结构体表示班级和学生，请计算每个班级学科平均分
// Student 名称(Name) 学号(Number) 科目(Subjects) 成绩(Scores)
// Class   名称(Name) 编号(Number) 学员(Students)
// Class   实现一个平均值的方法

type Student struct {
	name     string
	number   int
	subjects []string
	scores   []int
}
type Class struct {
	name     string
	number   int
	average  []float64
	students []*Student //以后要形成使用指针的习惯，指针的效率和空间占有都是最佳选择，除非有特殊情况必须取值类型
}

//构建结构体Class求平均值方法：
func (c *Class) subjectAvg(sum1, sum2, sum3 float64) []float64 {

	c.average = append(c.average, sum1/20, sum2/20, sum3/20)
	return c.average
}

func student_averagescore() {
	var sum1, sum2, sum3 float64
	for i := 1; i <= 3; i++ {
		sum1, sum2, sum3 = 0, 0, 0
		classi := &Class{name: "高三-", number: i} //初始化部分Class的值
		for j := 1; j <= 20; j++ {
			//生成随机数
			rand.Seed(time.Now().UnixNano())
			//初始化学生结构体
			studentj := &Student{name: GetFullName(), number: j, subjects: []string{"物理", "化学", "数学"}, scores: []int{rand.Intn(100) + 1, rand.Intn(100) + 1, rand.Intn(100) + 1}}
			//为Class.students赋值
			classi.students = append(classi.students, studentj)
			//fmt.Printf("%s 学号：%d 物理：%d 化学：%d 数学：%d\n", studentj.name, studentj.number, studentj.scores[0], studentj.scores[1], studentj.scores[2])
			//生成每科的总分
			sum1 += float64(studentj.scores[0])
			sum2 += float64(studentj.scores[1])
			sum3 += float64(studentj.scores[2])

		}
		//调用结构体方法得出平均值
		subjectaverage := classi.subjectAvg(sum1, sum2, sum3)
		fmt.Printf("高三-%d班【物理】【化学】【数学】的平均分分别是：%.2f,%.2f,%.2f\n", i, subjectaverage[0], subjectaverage[1], subjectaverage[2])

	}

}

var lastName = []string{
	"赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈", "褚", "卫", "蒋",
	"沈", "韩", "杨", "朱", "秦", "尤", "许", "何", "吕", "施", "张", "孔", "曹", "严", "华", "金", "魏",
	"陶", "姜", "戚", "谢", "邹", "喻", "柏", "水", "窦", "章", "云", "苏", "潘", "葛", "奚", "范", "彭",
	"郎", "鲁", "韦", "昌", "马", "苗", "凤", "花", "方", "任", "袁", "柳", "鲍", "史", "唐", "费", "薛",
	"雷", "贺", "倪", "汤", "滕", "殷", "罗", "毕", "郝", "安", "常", "傅", "卞", "齐", "元", "顾", "孟",
}
var firstName = []string{
	"伟", "刚", "勇", "毅", "俊", "峰", "强", "军", "平", "保", "东", "文", "辉", "力", "明", "永", "健", "世", "广", "志", "义",
	"兴", "良", "海", "山", "仁", "波", "宁", "贵", "福", "生", "龙", "元", "全", "国", "胜", "学", "祥", "才", "发", "武", "新",
	"利", "清", "飞", "彬", "富", "顺", "信", "子", "杰", "涛", "昌", "成", "康", "星", "光", "天", "达", "安", "岩", "中", "茂",
	"进", "林", "有", "坚", "和", "彪", "博", "诚", "先", "敬", "震", "振", "壮", "会", "思", "群", "豪", "心", "邦", "承", "乐",
	"绍", "功", "松", "善", "厚", "庆", "磊", "民", "友", "裕", "河", "哲", "江", "超", "浩", "亮", "政", "谦", "亨", "奇", "固",
}
var lastNameLen = len(lastName)
var firstNameLen = len(firstName)

func GetFullName() string {
	rand.Seed(time.Now().UnixNano())     //设置随机数种子
	var first string                     //名
	for i := 0; i <= rand.Intn(1); i++ { //随机产生2位或者3位的名
		first = fmt.Sprint(firstName[rand.Intn(firstNameLen-1)])
	}
	//返回姓名
	return fmt.Sprintf("%s%s", fmt.Sprint(lastName[rand.Intn(lastNameLen-1)]), first)
}
func main() {
	student_averagescore()
}

// 倪星 学号：1 物理：75 化学：10 数学：80
// 倪星 学号：2 物理：75 化学：10 数学：80
// 韦俊 学号：3 物理：60 化学：7 数学：35
// 韦俊 学号：4 物理：60 化学：7 数学：35
// 韦俊 学号：5 物理：60 化学：7 数学：35
// 卞健 学号：6 物理：78 化学：20 数学：69
// 卞健 学号：7 物理：78 化学：20 数学：69
// 卞健 学号：8 物理：78 化学：20 数学：69
// 卞健 学号：9 物理：78 化学：20 数学：69
// 卞健 学号：10 物理：78 化学：20 数学：69
// 云安 学号：11 物理：7 化学：74 数学：74
// 吴世 学号：12 物理：51 化学：95 数学：6
// 吴世 学号：13 物理：51 化学：95 数学：6
// 吴世 学号：14 物理：51 化学：95 数学：6
// 吴世 学号：15 物理：51 化学：95 数学：6
// 吴世 学号：16 物理：51 化学：95 数学：6
// 马心 学号：17 物理：71 化学：47 数学：37
// 马心 学号：18 物理：71 化学：47 数学：37
// 马心 学号：19 物理：71 化学：47 数学：37
// 马心 学号：20 物理：71 化学：47 数学：37
// 高三-1班：物理、化学、数学的平均分分别是：63.300000,43.900000,43.100000
// 马心 学号：1 物理：71 化学：47 数学：37
// 云俊 学号：2 物理：46 化学：45 数学：74
// 昌茂 学号：3 物理：64 化学：36 数学：17
// 昌茂 学号：4 物理：64 化学：36 数学：17
// 昌茂 学号：5 物理：64 化学：36 数学：17
// 昌茂 学号：6 物理：64 化学：36 数学：17
// 昌茂 学号：7 物理：64 化学：36 数学：17
// 昌茂 学号：8 物理：64 化学：36 数学：17
// 傅辉 学号：9 物理：82 化学：12 数学：50
// 傅辉 学号：10 物理：82 化学：12 数学：50
// 傅辉 学号：11 物理：82 化学：12 数学：50
// 傅辉 学号：12 物理：82 化学：12 数学：50
// 傅辉 学号：13 物理：82 化学：12 数学：50
// 傅辉 学号：14 物理：82 化学：12 数学：50
// 傅辉 学号：15 物理：82 化学：12 数学：50
// 费保 学号：16 物理：84 化学：59 数学：76
// 吴力 学号：17 物理：79 化学：25 数学：12
// 顾心 学号：18 物理：26 化学：48 数学：99
// 柳磊 学号：19 物理：7 化学：84 数学：69
// 吕庆 学号：20 物理：58 化学：36 数学：77
// 高三-2班：物理、化学、数学的平均分分别是：66.450000,32.200000,44.800000
// 陶庆 学号：1 物理：30 化学：99 数学：15
// 陶庆 学号：2 物理：30 化学：99 数学：15
// 冯武 学号：3 物理：35 化学：27 数学：50
// 韦乐 学号：4 物理：55 化学：46 数学：92
// 韦乐 学号：5 物理：55 化学：46 数学：92
// 奚茂 学号：6 物理：45 化学：84 数学：88
// 奚茂 学号：7 物理：45 化学：84 数学：88
// 毕强 学号：8 物理：9 化学：64 数学：71
// 孔达 学号：9 物理：54 化学：42 数学：15
// 薛毅 学号：10 物理：63 化学：63 数学：73
// 郑军 学号：11 物理：67 化学：55 数学：51
// 郑军 学号：12 物理：67 化学：55 数学：51
// 喻坚 学号：13 物理：72 化学：74 数学：61
// 喻坚 学号：14 物理：72 化学：74 数学：61
// 潘奇 学号：15 物理：32 化学：86 数学：31
// 柏浩 学号：16 物理：45 化学：48 数学：42
// 柏浩 学号：17 物理：45 化学：48 数学：42
// 王福 学号：18 物理：59 化学：52 数学：8
// 王福 学号：19 物理：59 化学：52 数学：8
// 花超 学号：20 物理：45 化学：45 数学：45
// 高三-3班：物理、化学、数学的平均分分别是：49.200000,62.150000,49.950000
// 记得完成哦
